/**
 * 给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。
 * 如果目标值不存在于数组中，返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
*/
#if  1
#include <stdio.h>
//利用二分法
// int searchInsert(int* nums, int numsSize, int target) {
//     int left = 0;
//     int right = numsSize - 1;
//     int mid = (left + right) / 2;
//     while (left < right && nums[mid] != target)
//     {
//         /* code */
//         if (nums[mid] < target)
//         {
//             /* code */
//             left = mid + 1;
//         }
//         else if (nums[mid] > target)
//         {
//             /* code */
//             right = mid - 1;
//         }
//         mid = (right + left) / 2;
//     }
//     if (nums[mid] == target)
//     {
//         /* code */
//         return mid;
//     }
//     if (nums[mid] != target)
//     {
//         /* code */
//         return left + 1;
//     }   
// }
int searchInsert(int* nums, int numsSize, int target) {
    int left = 0, right = numsSize - 1, ans = numsSize;
    while (left <= right) {
        int mid = ((right - left) >> 1) + left;
        if (target <= nums[mid]) {
            ans = mid;
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    return ans;
}

int main()
{
    int nums[] = {1,3,5,6};
    int target = 2;
    int length = sizeof(nums) / sizeof(int);
    int index = searchInsert(nums,length,target);
    printf("%d ",index);
    return 0;
}
#endif